/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.cliente;

import conexao.HibernateUtil;
import java.util.List;
import org.hibernate.*;

/**
 *
 * @author davi
 */
public class ClienteDAO {

    public void salvar(Cliente cliente) {
        Session sessao = null;
        Transaction transacao = null;

        try {
            SessionFactory sf = HibernateUtil.getSessionFactory();
            sessao = sf.openSession();
            transacao = sessao.beginTransaction();
            sessao.save(cliente);
            transacao.commit();
        } catch (HibernateException e ) {

            System.out.println("erro ao inserir contato. erro: " + e.getMessage());

        } finally {

            try {
                sessao.close();


            } catch (Throwable e) {
                System.out.println("erro ao fechar operacao de inserir. mensagem: " + e.getMessage());
            }

        }

    }
    
    public void atualizar(Cliente cliente){
    Session sessao = null;
        Transaction transacao = null;
        try {

            sessao = HibernateUtil.getSessionFactory().openSession();
            transacao = sessao.beginTransaction();
            sessao.update(cliente);
            transacao.commit();
             } catch (HibernateException e ) {

            System.out.println("erro ao atualizar contato. erro: " + e.getMessage());

        } finally {

            try {
                sessao.close();


            } catch (Throwable e) {
                System.out.println("erro ao fechar operacao de atualização. mensagem: " + e.getMessage());
            }

        }
        
    }
    
    
    
    public void excluir (Cliente cliente){
     Session sessao = null;
        Transaction transacao = null;
        try {

            sessao = HibernateUtil.getSessionFactory().openSession();
            transacao = sessao.beginTransaction();
            sessao.delete(cliente);
            transacao.commit();
             } catch (HibernateException e ) {

            System.out.println("erro ao deletar contato. erro: " + e.getMessage());

        } finally {

            try {
                sessao.close();


            } catch (Throwable e) {
                System.out.println("erro ao fechar operacao de deleção. mensagem: " + e.getMessage());
            }

        }
    
    }
    
    
    public Cliente buscaClienteDetalhes(String dado){
    
         Session sessao = null;
        Transaction transacao = null;
        Query consulta = null;
        String hql="from Cliente where idcliente = :dado";
       /* switch(tipoConsulta){
            case 1: hql = "select c from Cliente where c.nome = :dado";
            break;
             
        }
        * 
        *
        */
        try{
        sessao = HibernateUtil.getSessionFactory().openSession();
        transacao = sessao.beginTransaction();
        consulta = sessao.createQuery(hql);
        consulta.setString("dado", dado);
        return (Cliente) consulta.uniqueResult();
        }catch(HibernateException e){
            System.out.println("erro ao buscar detalhes contato. erro: " + e.getMessage());
            throw new HibernateException(e);
        }
        
    }
    
    public List<Cliente> listar(){
    
         Session sessao = null;
        Transaction transacao = null;
        Query consulta = null;
        List<Cliente> resultado = null;
        try {

            sessao = HibernateUtil.getSessionFactory().openSession();
            transacao = sessao.beginTransaction();
            consulta = sessao.createQuery("from Cliente");
            resultado = consulta.list();
            transacao.commit();
            return resultado;
             } catch (HibernateException e ) {

            System.out.println("erro ao selecionar contato. erro: " + e.getMessage());
            throw new HibernateException(e);

        } finally {

            try {
                sessao.close();


            } catch (Throwable e) {
                System.out.println("erro ao fechar operacao de listar . mensagem: " + e.getMessage());
            }

        }
    }
    
    
    
    
}
